iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
0
自我挑戰組

Codewar 進進出出 JS/Ruby系列 第 29

你今天重複了嗎?

  • 分享至 

  • xImage
  •  

題目:
(6 級) Counting Duplicates
寫一個 function,該 function 會計算字串中不區分大小寫的字母以及數字,出現超過一次的有幾個 (假定字串中僅包含大小寫字母和數字)。

範例:

"abcde" -> 0 
# 沒有任何字母出現超過 1 次

"aabbcde" -> 2 
# 'a' 和 'b'

"aabBcde" -> 2 
# 'a' 和 'b' 皆出現 2 次 ('b' 和 'B')

"indivisibility" -> 1 
# 'i' 出現 6 次

"Indivisibilities" -> 2 
# 'i' 出現 7 次 's' 出現 2 次

"aA11" -> 2 
# 'a' 和 '1'

"ABBA" -> 2 
# 'A' 和 'B' 皆出現 2 次

Ruby 解法:

def duplicate_count(text)
  # 先把計算結果設定為 0
  count = 0
  # 把 text 轉成小寫並拆開成陣列
  arr = text.downcase.split("")
  
  # 移除陣列中重複的字母後一個個拿出來比對
  arr.uniq.map { |char|
    # 如果單字有一個以上,計算結果就加 1
    count += 1 if arr.count(char) > 1
  }

  # 最後回傳計算結果
  count
end

心得:
這題原本想很久,後來發現有 count 方法可以用,瞬間就變得簡單很多。


JavaScript 解法:

function duplicateCount(text){
  let count = 0;
  let length = 0
  let arr = text.toLowerCase().split("");
  let unique = [...new Set(arr)];
  
  for (let i = 0; i < unique.length; i++){
    length = arr.filter(letter => {
      return letter === unique[i];
    }).length
    
    if (length > 1) count++;
  }
  
  return count;
}

心得:
這題的 JavaScript 本來也挺苦惱的,後來 Google 發現 ES6 有提供 Set 這個可以幫忙挑出 unique 的 object 可以用,題目就變得簡單許多。


上一篇
下一個質數
下一篇
ISBN-10
系列文
Codewar 進進出出 JS/Ruby30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言